home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PCGUIA 117
/
PC Guia 117.iso
/
Software
/
Utils
/
Software6
/
Product13
/
googlebar-0.9.5.06-fx.xpi
/
chrome
/
googlebar.jar
/
content
/
googlebarDragAndDrop.js
< prev
next >
Wrap
Text File
|
2005-02-20
|
7KB
|
255 lines
var defaultOrder = [
"cust-menu", "gbsearch-separate", "site-separate", "lucky-separate", "images-separate",
"groups-separate", "directory-separate", "news-separate", "answers-separate", "scholar-separate",
"catalog-separate", "froogle-separate", "stocks-separate", "unclesam-separate", "viewer-separate",
"webquotes-separate", "dictionary-separate", "glossary-separate", "bsd-separate", "linux-separate",
"mac-separate", "microsoft-separate", "separator1", "gb-options-separate", "spec-menu",
"comp-menu", "univ-button", "separator2", "extras-box", "info-menu",
"cached-separate", "similar-separate", "backwards-separate", "translate-separate", "up-dir-button",
"nav-box", "separator3", "highlightplus-button", "highlight-button", "gblogger-separate",
"nocalc-separate", "gb-prefill-separate", "gb-mycountry-separate", "gb-mylocal-separate"
];
var customOrder;
var creator = null;
var parentID = "googlebar-buttons";
var btnDragObserverOff = {
};
var btnDragObserverOn = {
getSupportedFlavours: function ()
{
var flavours = new FlavourSet();
flavours.appendFlavour("text/unicode");
return flavours;
},
onDragExit: function (evt, session)
{
myGooglebarUtil.updateClass(evt.target, 1, "dragbordernone");
},
onDragOver: function (evt, flavour, session)
{
if (creator == evt.target.getAttribute("id") || creator == "invalid")
{
return;
}
var halfX = evt.target.boxObject.x + (evt.target.boxObject.width / 2);
if (evt.pageX < halfX)
{
myGooglebarUtil.updateClass(evt.target, 1, "dragborderleft");
}
else
{
myGooglebarUtil.updateClass(evt.target, 1, "dragborderright");
}
},
onDragStart: function (evt, transferData, action)
{
if (evt.target.tagName == "menuitem")
{
creator = "invalid";
return;
}
var txt = evt.target.getAttribute("id");
creator = txt;
transferData.data = new TransferData();
transferData.data.addDataForFlavour("text/unicode", txt);
if ((evt.target.getAttribute("type") == "menu" || evt.target.getAttribute("type") == "menu-button") && evt.target.firstChild)
{
evt.target.firstChild.hidePopup();
}
},
onDrop: function (evt, dropdata, session)
{
if (dropdata.data != "")
{
creator = null;
var parElem = evt.target.parentNode;
var btmElem = evt.target;
var topElem = document.getElementById(dropdata.data);
var classes = btmElem.getAttribute("class").split(" ");
var secondaryClass = classes[1];
if (secondaryClass == "dragborderleft")
insertBefore(topElem.getAttribute("id"), btmElem.getAttribute("id"));
else if (secondaryClass == "dragborderright")
insertAfter(topElem.getAttribute("id"), btmElem.getAttribute("id"));
else
alert("error: drop occurred on invalid target");
updateOrdinals();
updateSeparators();
}
myGooglebarUtil.updateClass(evt.target, 1, "dragbordernone");
}
};
var btnDragObserver = btnDragObserverOn;
function initCustomOrder()
{
var element;
var parent = document.getElementById(parentID);
customOrder = new Array(parent.childNodes.length);
for (var i = 0; i < parent.childNodes.length; i++)
{
element = parent.childNodes[i];
customOrder[element.getAttribute("ordinal") - 1] = element.getAttribute("id");
}
}
function insertAfter(topElemID, btmElemID)
{
insertItem(topElemID, btmElemID, false);
}
function insertBefore(topElemID, btmElemID)
{
insertItem(topElemID, btmElemID, true);
}
function insertItem(topElemID, btmElemID, putBefore)
{
var topElemIdx = -1;
var btmElemIdx = -1;
var i;
for (i = 0; i < customOrder.length; i++)
{
if (customOrder[i] == topElemID)
{
topElemIdx = i;
break;
}
}
if (topElemIdx < 0)
alert("error: top element ID not found in collection");
var removed = customOrder.splice(topElemIdx, 1);
for (i = 0; i < customOrder.length; i++)
{
if (customOrder[i] == btmElemID)
{
btmElemIdx = i;
break;
}
}
if (btmElemIdx < 0)
alert("error: btm element ID not found in collection");
if (putBefore)
customOrder.splice(btmElemIdx, 1, topElemID, btmElemID);
else
customOrder.splice(btmElemIdx, 1, btmElemID, topElemID);
}
function lockOrdinalOrder()
{
btnDragObserver = btnDragObserverOff;
}
function unlockOrdinalOrder()
{
btnDragObserver = btnDragObserverOn;
}
function resetOrdinals()
{
for (var i = 0; i < defaultOrder.length; i++)
{
customOrder[i] = defaultOrder[i];
}
updateOrdinals();
}
function updateOrdinals()
{
var element;
var parent = document.getElementById(parentID);
for (var i = 0; i < customOrder.length; i++)
{
element = document.getElementById(customOrder[i]);
if (!element) {
alert('error: Could not find element (' + i + ') ' + customOrder[i] + ' in current document');
}
else {
element.setAttribute("ordinal", i + 1);
}
}
updateSeparators();
// Need a quick little refresh due to the apparent Mozilla problem with
// rendering menu buttons in the correct order after an ordinal change
parent.setAttribute("hidden", "true");
parent.setAttribute("hidden", "false");
}
function updateSeparators()
{
var element, next;
/* if a separator is next to another separator or the nav box then hide it */
for (var i = 0; i < customOrder.length - 1; i++)
{
if (/.*separator.*/.test(customOrder[i]))
{
element = document.getElementById(customOrder[i]);
next = getNextVisibleElement(i+1);
if ((/.*separator.*/.test(next) || next == "nav-box")) {
element.setAttribute("hidden", "true");
}
else {
element.setAttribute("hidden", "false");
}
}
}
/* if the last item is a separator then hide it */
if (/.*separator.*/.test(customOrder[customOrder.length-1]))
{
element = document.getElementById(customOrder[customOrder.length-1]);
element.setAttribute("hidden", "false");
}
}
function getNextVisibleElement(start)
{
var element;
for (var i = start; i < customOrder.length; i++)
{
element = document.getElementById(customOrder[i]);
if (element.getAttribute("hidden") == "false")
{
return customOrder[i];
}
}
/* if no visible elements found then force the separator to be hidden */
return "fakeseparator";
}